═══ 1. Family Tree ═══ A family tree consists of persons, which are related to each other. In the "empty" family tree there is only one person that's "Origin" and "Actual": Choose Add Partner from the contextmenu of this person and it gets a partner: Now we can add children by choosing Add Child from the contextmenu of one of them. When you select a person you'll notice, that it gets the red-shaded border - this is "Actual" from now on. Parents for "Adam" are no problem. Select "Adam" by clicking on it and choose Add Parents from the man's contextmenu. Not all persons in the family tree are shown at once. It depends on the person which is "Origin", which relatives you see. All ancestors (direct line) and descendants (with partner) of the "Origin" are shown. (Exception: You can change the view of the family tree via the Viewmenu). Try to make "Partner" the new "Origin" by double-clicking on it or choosing Origin from his context-menu. The color of "Partner" changes to red - now he's "Origin" of the family tree. Did you notice, that the parents of "Adam" have vanished and only a dotted line shows they're still there ? But now you can see all ancestors of "Partner" if you add them to it. Now make "Child" the new "Origin" (its color changes to red) and add a few siblings via the context-menu from "Adam": The siblings of "Child" are not shown, because they are neither ancestors nor descendants of it. Try building a family tree and changing the "Origin". Change the view by choosing items from the Viewmenu. Open the List window, where all persons are sorted alphabetically. Open the Edit window and change properties like last name or first name. ═══ 2. Main Window ═══ Family Tree ... Graphical Managing of a Family Tree Copyright 1996 by Nils Meier (meier2@athene.informatik.uni-bonn.de) Important : Please read readme.txt for Copyright and usage hints ! This is the initial help for Family Tree. If you start the program, you'll see the main window and get to this help by pressing F1. The main window consists of a "white piece of paper" with one person "Adam", a statusbar, a slider and a window-menu. The principle of a family tree is explained here. You can immediately start entering a family tree by selecting a person (simple mouse-click), activating the context-menu of the person (click with right mouse-button) and choosing actions. Click with the right mouse-button on a free space in the family and the Viewmenu appears. By clicking with the left mouse-button on the tree and keeping it pressed, you can move the tree around. You can save, load and print a family tree via the Filemenu. The Viewmenu gives you the opportunity to change the family tree view. Start Rexx scripts that do various reports and im/export via the Rexxmenu and program your own Rexx Routines. You can change the zoom-rate by using the slider on the left side of the main window (or by pressing +/-). Change the font or color of the tree just by dropping one from the font/color palette. If you want a default tree to be loaded on startup just specify its name on commandline or the parameter field of the program object. ═══ 3. Edit Window ═══ You can change the properties of the "Actual" in this window. These are for now : 1. Last name 2. First name 3. Sex 4. Birth date 5. - place 6. Death date 7. - place 8. Marriage with Partner 9. - Marriage date 10. - place 11. - end 12. Memo 13. Picture Open the Edit Window via the context-menu of a man. Enter your data in the corresponding fields. If you place a tilde (~) in the first name-field the name directly following it becomes the given name and is the only one that is shown in the family tree. You can delete any date information by pressing ESC, when the cursor is in a date field. Change the sex of a person, by clicking on the "Sex"-button. If the "Actual" has several partners, you can click through them by pressing the "Marriage X/Y". Then you can change the information of a partnership (Xth marriage of Y). Drag&Drop any GIF, BMP or PCX to the picture or click on the picture to enter a path manually. Click once again and you'll see the picture again. Attention: FTree only remembers where the picture resides (Its data is not saved). If the picture gets moved or deleted later, FTree can't find it and shows a questionmark. If the family tree has no name or the dropped picture is not from the actual (sub-)directory, the whole path information is remembered. If you drop a picture from the actual (sub-)directory only the relative path is remembered. The pictures are still found if you move the family tree with its pictures to another media. ═══ 4. List Window ═══ This window contains a list of all persons in the family tree. You can select a person and open its context-menu via right mouse-click. Open the List Window, by choosing List from the Viewmenu. You can specify how the list should be sorted by selecting the appropriate menu item from the system menu. ═══ 5. Print dialog ═══ This dialog shows up, when you select Print from the menu. You can choose a Printer here and change print options. Click on Fit to change the number of pages to a specific number. The family tree will be shrunk or grown to the specified number of pages. When Fit isn't choosen, you can choose a magnify factor by using the slider Zoom by. Click on Print to start the printing, Properties to change printer options and Cancel to go back to the family tree. ═══ 6. Rexx dialog ═══ You can choose a Rexx-Script in this dialog. All scripts in the current directory are shown (*.ftx) with author and a short description. You can start the selected script or cancel rexx starting. After pressing the button Remember the selected script appears in the rexxmenu and can be started directly there. ═══ 7. Rexx output ═══ The output of a Rexx-script is shown in this window. You can Cancel the rexx execution, close the window by choosing OK and Save the output to a file. ═══ 8. Programming Rexx ═══ FamilyTree can run Rexx scripts in its context for various purposes. A script can do different reports, manipulate data and import or export FamilyTree information to/from a file. You have to create a Rexx file (*.ftx) if you want to run your own routines. The header should look like this: /* Family Tree Rexx Script FTX Copyright (C) 1996 by < description in english / addition description in other language > */ The author's name (between <>) and the description (between <>) is shown in the Rexx selection dialog. A Rexx script can access persons and families from the actual family tree with several functions. There is always one person and one family (if exists) selected. You can either change the person or family selection by moving from one to another or query/change data with data functions. Please use the provided scripts as examples when you write your own and send a copy of your new script to the author if it can be of interest for other users. The following functions let you query program settings: ┌───────────────────┬────────────────────────┬─────────────────────────────┐ │ FUNCTION NAME │ ACTION │ PARAMETERS │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ getLanguage() │ returns language │ none │ │ │ 'deutsch'/'english' │ │ │ selectFilename() │ returns filename │ 'Dialogtitle','*.*' │ │ │ '' for cancel │ │ └───────────────────┴────────────────────────┴─────────────────────────────┘ The following functions let you move through persons and families: ┌───────────────────┬────────────────────────┬─────────────────────────────┐ │ FUNCTION NAME │ ACTION │ PARAMETERS │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ sortPersons() │ sort persons by │ 'N|n'ame │ │ │ │ 'F|f'irst name │ │ │ │ 'B|b[D|M|Y]'irth date │ │ │ │ 'D|d[D|M|Y]'eath date │ │ │ │ 'L|l[D|M|Y]'ivetime │ │ │ │ - Repeat via ',' │ │ │ │ - 'A'scending/'d'escending │ │ │ │ - [Day,Month,Year] │ │ sortFamilies() │ sort families by │ 'M|m[D|M|Y]'arriage date │ │ │ │ - see above │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ selectPerson() │ selects a person │ 'F'irst │ │ │ returns '1' if done │ 'L'ast │ │ │ '0' otherwise │ 'P'revious │ │ │ │ 'N'ext │ │ │ │*'p'artner in current family │ │ │ │*'1|2|3..' child in family │ │ │ │ - * results in error, when │ │ │ │ actual family was imported │ │ selectFamily() │ selects a family │ 'F'irst │ │ │ returns '1' if done │ 'L'ast │ │ │ '0' otherwise │ 'P'revious │ │ │ │ 'N'ext │ │ │ │*'p'arental fam of person │ │ │ │*'1|2|..' fam of act. person │ │ │ │ - * results in error, when │ │ │ │ actual person was imported │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ doStack() │ stack operation │*'P(P|F)'ush on stack │ │ │ │ 'p(P|F)'op from stack │ │ │ │*'S(P|F)'wap with stack │ │ │ │ - [P]erson|[F]amily │ │ │ │ - * results in error, when │ │ │ │ you try to push or swap an │ │ │ │ imported Person or Family │ └───────────────────┴────────────────────────┴─────────────────────────────┘ Example: Sort all persons by birth date (ascending) rc=sortPersons('B') Example: Sort all persons by their birth month,day (descending) rc=sortPersons('bm,bd') Example: Sort all families by marriage date (ascending) rc=sortFamilies('M') Example: Select first man in list rc=selectPerson('F') Example: Select 2nd child of current family rc=selectPerson('2') Example: Select 1st family of current person rc=selectFamily('1') The following functions refer to the data of the actual person: ┌───────────────────┬────────────────────────┬─────────────────────────────┐ │ FUNCTION NAME │ ACTION │ PARAMETERS │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ getPID() │ returns ID │ none │ │ getName() │ returns name │ none │ │ getFirstName() │ returns first name │ none │ │ getSex() │ returns sex 0|1|2 │ none │ │ getBirthDate() │ returns birth date │ none (full) │ │ │ │ |'D'ay │ │ │ │ |'M'onth │ │ │ │ |'m'onth name │ │ │ │ |'Y'ear │ │ │ │ |'d'ays (since 00.00.0000) │ │ getBirthPlace() │ returns birth place │ none │ │ getDeathDate() │ returns death date │ none (full date) │ │ │ │ |'D'ay │ │ │ │ |'M'onth │ │ │ │ |'m'onth name │ │ │ │ |'Y'ear │ │ │ │ |'d'ays (since 00.00.0000) │ │ getDeathPlace() │ returns death place │ none │ │ getOccupation() │ returns occupation │ none │ │ getMemo() │ returns memo │ none (all) │ │ │ │ |line '1','2','3',... │ │ getPicture() │ returns picture path │ none │ │ setPID() │ sets ID │ 'id' │ │ │ │ - results in error, when │ │ │ │ actual is not an imported │ │ │ │ or id=0 or id is not num │ │ setName() │ sets name │ 'name' │ │ setFirstName() │ sets first name │ 'first name' │ │ setSex() │ sets sex │ '0'None|'1'Male|'2'Female │ │ setBirthDate() │ sets birth date │ 'dd.mm.yyyy' │ │ setBirthPlace() │ sets birth place │ 'place' │ │ setDeathDate() │ sets death date │ 'dd.mm.yyyy' │ │ setDeathPlace() │ sets death place │ 'place' │ │ setOccupation() │ sets occupation │ 'occupation' │ │ setMemo() │ sets memo │ 'memo' │ │ setPicture() │ sets picture path │ 'path' │ └───────────────────┴────────────────────────┴─────────────────────────────┘ Example: Get name of actual person name=getName() Example: Get birth month of actual person date=getBirthDate('M') Example: Get 2nd line of the memo-field of the actual person memo=getMemo('2') The following functions refer to the data of the actual family: ┌───────────────────┬────────────────────────┬─────────────────────────────┐ │ FUNCTION NAME │ ACTION │ PARAMETERS │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ getFID() │ returns ID │ none │ │ getMarriageDate() │ returns marriage date │ none (full date) │ │ │ │ 'D'ay │ │ │ │ 'M'onth │ │ │ │ 'm'onth name │ │ │ │ 'Y'ear │ │ │ │ 'd'ays (since 00.00.0000) │ │ getMarriagePlace()│ returns marriage place │ none │ │ getDivorceDate() │ returns divorce date │ none (full date) │ │ │ │ 'D'ay │ │ │ │ 'M'onth │ │ │ │ 'm'onth name │ │ │ │ 'Y'ear │ │ │ │ 'd'ays (since 00.00.0000) │ │ setFID() │ sets ID │ 'id' │ │ │ │ - results in error, when │ │ │ │ actual is not an imported │ │ │ │ or id=0 or id is not num │ │ setMarriageDate() │ sets marriage date │ 'dd.mm.yyyy' │ │ setMarriagePlace()│ sets marriage place │ 'place' │ │ setDivorceDate() │ sets divorce date │ 'dd.mm.yyyy.' │ └───────────────────┴────────────────────────┴─────────────────────────────┘ Example: Get divorce date of current family date=getDivorceDate() Example: Get marriage year of current family date=getMarriageDate('Y') The following functions let you import new persons and families: ┌───────────────────┬────────────────────────┬─────────────────────────────┐ │ FUNCTION NAME │ ACTION │ PARAMETERS │ ├───────────────────┼────────────────────────┼─────────────────────────────┤ │ importPerson() │ create a new Person │ none │ │ importFamily() │ create a new Family │ none │ │ importAddPartner()│ add ID of Partner to │ 'id' of one Partner of the │ │ │ imported family │ last imported! Family │ │ importAddChild() │ add ID of Child to │ 'id' of one Child of the │ │ │ imported family │ last imported! Family │ │ importDone() │ trigger import routine │ none │ │ │ tree is resetted and │ objects with lost ID's and │ │ │ as much information as │ Families that build loops │ │ │ possible imported │ are not imported │ └───────────────────┴────────────────────────┴─────────────────────────────┘ Example: Import a Person ok=importPerson() Example: Set ID of one Partners of the last imported family to 3 ok=importAddPartner(3) ═══ 9. Filemenu ═══ The Filemenu enables you to do the following actions on the family tree. You can 1. Make a new, 2. load, 3. save, 4. save with name, 5. print, 6. close a family tree and quit the program. ═══ 9.1. New family tree ═══ By choosing File|New you can start with a new family tree. ═══ 9.2. Load family tree ═══ By choosing File|Load you can load an existing family tree. ═══ 9.3. Save family tree ═══ By choosing File|Save you can save a modified family tree 3which was previously loaded or saved with save as. ═══ 9.4. Save family tree as ═══ By choosing File|SaveAs you can save a modified family tree. ═══ 9.5. Close family tree ═══ By choosing File|Close you can close the family tree and quit the program. ═══ 9.6. Print family tree ═══ by choosing File|Print you can print out the family tree. ═══ 10. Viewmenu ═══ The Viewmenu is shown via the mainmenu at the top of the main window or by right-clicking on a free space in the family tree. Following options are available: 1. Ancestors, 2. Descendants, 3. A+D 4. A+D+Siblings 5. First name 6. Birth/Death date 7. Vertical 8. Horizontal 9. List ═══ 10.1. Ancestors ═══ By choosing View|Ancestors only ancestors of the "Actual" are shown. ═══ 10.2. Descendants ═══ By choosing View|Descendants only descendants (with Partner) of the "Actual" are shown. ═══ 10.3. A+D ═══ By choosing View|A+D all ancestors and descendants (with Partner) of the "Actual" are shown. ═══ 10.4. A+D+Siblings ═══ By choosing View|A+D+Siblings all ancestors, descendants (with Partner) and the siblings (with Ancestors) of the "Actual" are shown. ═══ 10.5. First name ═══ By choosing View|First name you can specify that persons show their first name. ═══ 10.6. Birth/Death date ═══ By choosing View|Birth/Death date you can specify that persons show their dates. ═══ 10.7. Vertical ═══ By choosing View|Vertical the family tree is shown vertical (Not yet implemented). ═══ 10.8. Horizontal ═══ By choosing View|Horizontal the family tree is shown horizontal. ═══ 10.9. List ═══ By choosing View|List a List Window with an alphabetic list of all persons in the family tree is shown. An additional selection closes the List Window, when it is already open (the item is checked). ═══ 11. Person ═══ The context-menu of a person enables you to do the following actions (A right mouse-click on a person in the family tree opens it): 1. Center, 2. Edit, 3. Make Origin 4. Delete children 5. Delete parents 6. Delete "Actual" 7. Add child 8. Add Parents 9. Add Partner ═══ 11.1. Center ═══ By choosing Center the family tree is so positioned that the "Actual" is in the middle of the window (Not yet implemented). ═══ 11.2. Edit ═══ By choosing Edit a Edit Window is opened, where you can change the properties of the "Actual". The item is checked, if the edit window is already open, and a new selection closes it. ═══ 11.3. Origin ═══ By choosing Origin the "Actual" becomes the "Origin" of the family tree. ═══ 11.4. Del|Children with ═══ By choosing Del|Children with all children of the "Actual" are deleted. If the "Actual" has more than one partner you have to specify the other one, whose children should be deleted. Warning: All children, their descendants and ancestors (without the "Actual") are deleted ! ═══ 11.5. Del|Parents ═══ By choosing Del|Parents the parents of the "Actual" are deleted. Warning: The parents, their ancestors and descendants (without the "Actual") are deleted ! ═══ 11.6. Del|This ═══ By choosing Del|This the "Actual" is deleted. The item is not selectable, if the family tree breaks in two parts or the "Actual" is also the "Origin". ═══ 11.7. Child with ═══ By choosing child the "Actual" is added a child. If the "Actual" has more than one partner you have to specify the other one, who is parent of the new child. This item is not selectable, if the "Actual" has no partner or has the maximum allowable number of children. ═══ 11.8. Parents (adding of) ═══ By choosing Parents the "Actual" is added parents. This item is not selectable, if the "Actual" already has parents. ═══ 11.9. Partner (adding of) ═══ By choosing Partner the "Actual" is added a partner. This item is not selectable, if the "Actual" already has a partner. ═══ 12. Start Rexx ═══ You can start a Rexx-script by choosing Rexx|Start from the mainmenu at the top of the main window. The Rexx dialog appears for a detailed selection. A remembered script can be started directly. ═══ 13. Registration ═══ Family Tree is Shareware. You are allowed to test and use this program for x days (x depends on you). If you want to support the author in developing this software you are invited to register. Registration fee is 20 German Marks or US $ 15. You will get a registration code that you have to enter in the about dialog (reachable by the menu Help|About). The registration is valid for all versions 1.x and 2.x. Beside that you will get an e-mail, if a new version of Family Tree is released. Add 5 German Marks or US $ 5, if you want to receive the actual version on disk. Please send me a note which format I should put it on (3 1/2 or 5 1/4). You can pay by 1. Money transfer order to Nils Meier Account number 210 156 3017 at Volksbank Lohmar, Germany bank code 386 600 95 Please specify "FTree Registration" and your primary name. Note: Please use a method where you pay the bank fee ! Because banks tend to charge immense ammounts of money for their service, this way is not advised when living outside germany. 2. Cash by postal mail to Nils Meier Birkenweg 27 53797 Lohmar Germany 3. Eurocheque payable to Nils Meier in German Marks Same address as above 4. Registration through BMT Micro in Wilmington, NC 28408, USA Please refer to the text file Order.BMT for information on how to register this way. (Registration fee is US $ 20) Please send the following information : 1. Name 2. Address 3. E-Mail address 4. Way of payment  Money transfer order  Cheque (Included in postal mail)  Cash (Included in postal mail) 5. Where you want the registration code to be sent.  Postal mail to above address.  E-mail to above address. Thanks for registering !